Programmable logic devices such as Field Programmable Gate Arrays (“FPGA”) and Complex Programmable Logic Devices (“CPLD”) are widely used because of their inherent speed, size, power, and flexibility advantages. However, an aspect of the inherent flexibility of programmable logic is that there is a corresponding built-in hardware complexity associated with programmable logic. Even though not every type of gate or interconnection is needed for any given design, a complete set of configurable logic must be provided in a configurable logic device so that a programmable logic device can be programmed to carry out any arbitrary function. Accordingly, in a particular digital logic design, much of the available circuitry in a CPLD or FPGA can go unused.
Many programmable logic designs employ the logical functions of counters and/or shift registers to accomplish various functions. Counters can be used for several purposes, including as clock dividers, as scaling elements, for timing, and to provide time-windowing functions. In one estimate, more than 50% of all designs incorporate at least one counter. Shift registers are also commonly used, and have various uses including, for example, FIFO's for serial communication.
In order to build, for example, a counter or shift register (“function unit”) in programmable logic, users of programmable logic have heretofore needed to create such a function unit using programmable logic elements, such as general purpose product terms and macrocells or logic blocks that could, ideally, be used for other aspects of the digital design. Accordingly, while function units can be implemented in programmable logic, when they are so implemented, much of the underlying programmable hardware is consumed by the function units, leaving reduced programmable logic for the remainder of the design, or otherwise requiring undesirably large amounts of programmable logic. Programmable logic elements would ideally be used for custom aspects of a particular design, rather than for commonly recurring function units. Accordingly, there is a need for programmable logic devices that provide configurable function units, such as counters and shift registers, without necessitating the use of conventional programmable logic resources to implement the configurable function units.